{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<center>\n",
    "    <p style=\"text-align:center\">\n",
    "        <img alt=\"phoenix logo\" src=\"https://storage.googleapis.com/arize-phoenix-assets/assets/phoenix-logo-light.svg\" width=\"200\"/>\n",
    "        <br>\n",
    "        <a href=\"https://arize.com/docs/phoenix/\">Docs</a>\n",
    "        |\n",
    "        <a href=\"https://github.com/Arize-ai/phoenix\">GitHub</a>\n",
    "        |\n",
    "        <a href=\"https://arize-ai.slack.com/join/shared_invite/zt-2w57bhem8-hq24MB6u7yE_ZF_ilOYSBw#/shared-invite/email\">Community</a>\n",
    "    </p>\n",
    "</center>\n",
    "<h1 align=\"center\">Human/GroundTruth Versus AI  Evals</h1>\n",
    "\n",
    "Arize provides tooling to evaluate LLM applications, including tools to determine whether AI answers match Human Groundtruth answers. In many Q&A systems its important to test the AI answer results as compared to Human answers prior to deployment. These help assess how often the answers are correctly generated by the AI system. \n",
    "\n",
    "The purpose of this notebook is:\n",
    "\n",
    "- to evaluate the performance of an LLM-assisted Evals for AI vs Human answers \n",
    "- to provide an experimental framework for users to iterate and improve on the default classification template.\n",
    "\n",
    "## Install Dependencies and Import Libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Requires arize-phoenix as it usees UI / tracing\n",
    "!pip install -qq \"arize-phoenix\" \"openai>=1\" ipython matplotlib pycm scikit-learn tiktoken openinference-instrumentation-openai 'httpx<0.28'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Matplotlib is building the font cache; this may take a moment.\n",
      "/Users/jasonlopatecki/vs_projects/retr3/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
      "  from .autonotebook import tqdm as notebook_tqdm\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "from getpass import getpass\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "from pycm import ConfusionMatrix\n",
    "from sklearn.metrics import classification_report\n",
    "\n",
    "from phoenix.evals import (\n",
    "    HUMAN_VS_AI_PROMPT_RAILS_MAP,\n",
    "    HUMAN_VS_AI_PROMPT_TEMPLATE,\n",
    "    OpenAIModel,\n",
    "    llm_classify,\n",
    ")\n",
    "\n",
    "pd.set_option(\"display.max_colwidth\", None)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Download the Dataset\n",
    "\n",
    "We've crafted a dataset of common questions and answers about the Arize platform."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>question</th>\n",
       "      <th>Out-of-doc</th>\n",
       "      <th>Topic</th>\n",
       "      <th>notes</th>\n",
       "      <th>correct_answer</th>\n",
       "      <th>ai_generated_answer</th>\n",
       "      <th>human_ai_eval</th>\n",
       "      <th>human_ai_explanation</th>\n",
       "      <th>ai_answer</th>\n",
       "      <th>true_value</th>\n",
       "      <th>Who Answered?</th>\n",
       "      <th>incorrect_answer</th>\n",
       "      <th>ai_questions</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>NaN</td>\n",
       "      <td>Does Arize support total token usage tracking?</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Arize supports tracking token usage both prompt and completion usage. Additionally costs can be calculated based on usage.</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Arize supports tracking prompt and completion token usage.</td>\n",
       "      <td>True</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>NaN</td>\n",
       "      <td>What is LLM Observability?</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Large Language Model (LLMs) similar to traditional machine learning need production Observability for deployed sytems. Arguablly the LLMs have a wider range of possible actions. tend to be less predictable and have a wide range of potential output problems inclding hallcinations. Observability and LLM Evaluation plays a similar role in LLMs to surface issues, monitor for problems and iterate / improve on data. We need to understand when issues occur, where and why they happen and have the ability to quickly resolve and root cause issues.</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>LLM Observability is the ability to watch LLMs as they are put into produciton.</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>NaN</td>\n",
       "      <td>What Evals are supported for LLMs or generative models?</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Arize supports a suite of Evals available from the Phoenix Evals library, they include both pre-tested Evals and the ability to configure cusotm Evals. Some of the pre-tested LLM Evals are listed below:\\nRetrieval Relevance \\nQuestion and Answer \\nToxicity\\nHuman Groundtruth vs AI \\nCitation Reference Link Relevancy \\nCode Readability \\nHallucination Detection \\nSummarizaiton</td>\n",
       "      <td>Arize supports LLM Evals.</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Arize supports LLM Evals.</td>\n",
       "      <td>False</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>NaN</td>\n",
       "      <td>Does Arize support tracing for LangChain and LlamaIndex LLM spans?</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Arize supports tracking LLM span data from LlamaIndex and LangChain using the Arize OpenInference callback handler. We have one-click tracking support for both of those frameworks that capture trace data for embedding spans, retrieval spans, LLM spans, and chain spans.</td>\n",
       "      <td>Arize supports tracking LLM span data from LlamaIndex and LangChain using the Arize OpenInference callback handler. We have one-click tracking support for both of those frameworks that capture trace data for embedding spans, retrieval spans, LLM spans, and chain spans.</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Arize supports span tracking with LlamaIndex and LangChain, one-click tracing. The LLM span tracing includes tracking of the following span types:\\n- retrieval spans\\n- LLM Spans\\n- chain spans\\n-embedding spans</td>\n",
       "      <td>True</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>NaN</td>\n",
       "      <td>How do I use the SDK to upload a ranking model?</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>A ranking model is integrated into the SDK where each row is an item in the ranked list. The three fields that need to be integrated are rank, relevance_score and prediction_group_id. The \"rank\" determines the rank number of this item in the list. The relevance_score represents the estimated probability of clicking on that item. The prediction_group_id groups the ranked items into a list, representing the set for a speciifc query.</td>\n",
       "      <td>To upload a ranking model using the SDK, you would typically follow these steps:\\n\\n1. Install the SDK in your Python environment if you haven't already done so.\\n2. Import the SDK into your Python script where you plan to upload the model data.\\n3. Configure the SDK with your Arize API key and space key to authenticate your requests.\\n4. Define your model schema, including fields like `rank`, `prediction_score`, and `prediction_group_id`.\\n5. Use the SDK functions to log model predictions, actuals, and any additional metadata related to your ranking model.\\n6. Once your data is prepared, call the appropriate function provided by the SDK to send your ranking model data to the Arize platform.\\n\\nThe exact function names and parameters may vary based on the SDK version and the specifics of the ranking model you are working with. You should refer to the SDK documentation for detailed instructions on logging model schemas and sending data to the Arize platform.</td>\n",
       "      <td>incorrect</td>\n",
       "      <td>The AI answer provides a general process of uploading a model using an SDK, but it does not specifically address the question about uploading a ranking model. The human answer provides specific details about the fields that need to be integrated into the SDK for a ranking model, which are not mentioned in the AI answer.</td>\n",
       "      <td>To upload a ranking model using the SDK, you would typically follow these steps:\\n\\n1. Install the SDK in your Python environment if you haven't already done so.\\n2. Import the SDK into your Python script where you plan to upload the model data.\\n3. Configure the SDK with your Arize API key and space key to authenticate your requests.\\n4. Define your model schema, including fields like `rank`, `prediction_score`, and `prediction_group_id`.\\n5. Use the SDK functions to log model predictions, actuals, and any additional metadata related to your ranking model.\\n6. Once your data is prepared, call the appropriate function provided by the SDK to send your ranking model data to the Arize platform.\\n\\nThe exact function names and parameters may vary based on the SDK version and the specifics of the ranking model you are working with. You should refer to the SDK documentation for detailed instructions on logging model schemas and sending data to the Arize platform.</td>\n",
       "      <td>False</td>\n",
       "      <td>Jason</td>\n",
       "      <td>NaN</td>\n",
       "      <td>How do I use the SDK to upload a ranking model?</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Unnamed: 0  \\\n",
       "0         NaN   \n",
       "1         NaN   \n",
       "2         NaN   \n",
       "3         NaN   \n",
       "4         NaN   \n",
       "\n",
       "                                                             question  \\\n",
       "0                      Does Arize support total token usage tracking?   \n",
       "1                                          What is LLM Observability?   \n",
       "2             What Evals are supported for LLMs or generative models?   \n",
       "3  Does Arize support tracing for LangChain and LlamaIndex LLM spans?   \n",
       "4                     How do I use the SDK to upload a ranking model?   \n",
       "\n",
       "   Out-of-doc Topic notes  \\\n",
       "0         NaN   NaN   NaN   \n",
       "1         NaN   NaN   NaN   \n",
       "2         NaN   NaN   NaN   \n",
       "3         NaN   NaN   NaN   \n",
       "4         NaN   NaN   NaN   \n",
       "\n",
       "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    correct_answer  \\\n",
       "0                                                                                                                                                                                                                                                                                                                                                                                                                                       Arize supports tracking token usage both prompt and completion usage. Additionally costs can be calculated based on usage.   \n",
       "1  Large Language Model (LLMs) similar to traditional machine learning need production Observability for deployed sytems. Arguablly the LLMs have a wider range of possible actions. tend to be less predictable and have a wide range of potential output problems inclding hallcinations. Observability and LLM Evaluation plays a similar role in LLMs to surface issues, monitor for problems and iterate / improve on data. We need to understand when issues occur, where and why they happen and have the ability to quickly resolve and root cause issues.   \n",
       "2                                                                                                                                                                      Arize supports a suite of Evals available from the Phoenix Evals library, they include both pre-tested Evals and the ability to configure cusotm Evals. Some of the pre-tested LLM Evals are listed below:\\nRetrieval Relevance \\nQuestion and Answer \\nToxicity\\nHuman Groundtruth vs AI \\nCitation Reference Link Relevancy \\nCode Readability \\nHallucination Detection \\nSummarizaiton    \n",
       "3                                                                                                                                                                                                                                                                                    Arize supports tracking LLM span data from LlamaIndex and LangChain using the Arize OpenInference callback handler. We have one-click tracking support for both of those frameworks that capture trace data for embedding spans, retrieval spans, LLM spans, and chain spans.   \n",
       "4                                                                                                              A ranking model is integrated into the SDK where each row is an item in the ranked list. The three fields that need to be integrated are rank, relevance_score and prediction_group_id. The \"rank\" determines the rank number of this item in the list. The relevance_score represents the estimated probability of clicking on that item. The prediction_group_id groups the ranked items into a list, representing the set for a speciifc query.    \n",
       "\n",
       "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ai_generated_answer  \\\n",
       "0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          NaN   \n",
       "1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          NaN   \n",
       "2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Arize supports LLM Evals.   \n",
       "3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Arize supports tracking LLM span data from LlamaIndex and LangChain using the Arize OpenInference callback handler. We have one-click tracking support for both of those frameworks that capture trace data for embedding spans, retrieval spans, LLM spans, and chain spans.   \n",
       "4  To upload a ranking model using the SDK, you would typically follow these steps:\\n\\n1. Install the SDK in your Python environment if you haven't already done so.\\n2. Import the SDK into your Python script where you plan to upload the model data.\\n3. Configure the SDK with your Arize API key and space key to authenticate your requests.\\n4. Define your model schema, including fields like `rank`, `prediction_score`, and `prediction_group_id`.\\n5. Use the SDK functions to log model predictions, actuals, and any additional metadata related to your ranking model.\\n6. Once your data is prepared, call the appropriate function provided by the SDK to send your ranking model data to the Arize platform.\\n\\nThe exact function names and parameters may vary based on the SDK version and the specifics of the ranking model you are working with. You should refer to the SDK documentation for detailed instructions on logging model schemas and sending data to the Arize platform.   \n",
       "\n",
       "  human_ai_eval  \\\n",
       "0           NaN   \n",
       "1           NaN   \n",
       "2           NaN   \n",
       "3           NaN   \n",
       "4     incorrect   \n",
       "\n",
       "                                                                                                                                                                                                                                                                                                                human_ai_explanation  \\\n",
       "0                                                                                                                                                                                                                                                                                                                                NaN   \n",
       "1                                                                                                                                                                                                                                                                                                                                NaN   \n",
       "2                                                                                                                                                                                                                                                                                                                                NaN   \n",
       "3                                                                                                                                                                                                                                                                                                                                NaN   \n",
       "4  The AI answer provides a general process of uploading a model using an SDK, but it does not specifically address the question about uploading a ranking model. The human answer provides specific details about the fields that need to be integrated into the SDK for a ranking model, which are not mentioned in the AI answer.   \n",
       "\n",
       "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ai_answer  \\\n",
       "0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Arize supports tracking prompt and completion token usage.   \n",
       "1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             LLM Observability is the ability to watch LLMs as they are put into produciton.    \n",
       "2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Arize supports LLM Evals.   \n",
       "3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Arize supports span tracking with LlamaIndex and LangChain, one-click tracing. The LLM span tracing includes tracking of the following span types:\\n- retrieval spans\\n- LLM Spans\\n- chain spans\\n-embedding spans   \n",
       "4  To upload a ranking model using the SDK, you would typically follow these steps:\\n\\n1. Install the SDK in your Python environment if you haven't already done so.\\n2. Import the SDK into your Python script where you plan to upload the model data.\\n3. Configure the SDK with your Arize API key and space key to authenticate your requests.\\n4. Define your model schema, including fields like `rank`, `prediction_score`, and `prediction_group_id`.\\n5. Use the SDK functions to log model predictions, actuals, and any additional metadata related to your ranking model.\\n6. Once your data is prepared, call the appropriate function provided by the SDK to send your ranking model data to the Arize platform.\\n\\nThe exact function names and parameters may vary based on the SDK version and the specifics of the ranking model you are working with. You should refer to the SDK documentation for detailed instructions on logging model schemas and sending data to the Arize platform.   \n",
       "\n",
       "  true_value Who Answered? incorrect_answer  \\\n",
       "0       True           NaN              NaN   \n",
       "1      False           NaN              NaN   \n",
       "2      False           NaN              NaN   \n",
       "3       True           NaN              NaN   \n",
       "4      False         Jason              NaN   \n",
       "\n",
       "                                      ai_questions  \n",
       "0                                              NaN  \n",
       "1                                              NaN  \n",
       "2                                              NaN  \n",
       "3                                              NaN  \n",
       "4  How do I use the SDK to upload a ranking model?  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "csv_file_path = \"https://storage.googleapis.com/arize-phoenix-assets/evals/human_vs_ai/human_vs_ai_classifications.csv\"\n",
    "\n",
    "# Read the CSV file into a DataFrame\n",
    "df = pd.read_csv(csv_file_path).dropna(subset=[\"correct_answer\"]).reset_index(drop=True)\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  Vizualization of Prompts/Templates Evals in Phoenix (Optional Section)\n",
    "\n",
    "Visualization of Evals is not required but can be helpful to see the actual calls to the LLM. \n",
    "The link below starts the Phoenix UI/server and is a link to Phoenix running locally"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "🌍 To view the Phoenix app in your browser, visit http://localhost:6006/\n",
      "📖 For more information on how to use Phoenix, check out https://arize.com/docs/phoenix\n"
     ]
    }
   ],
   "source": [
    "from openinference.instrumentation.openai import OpenAIInstrumentor\n",
    "\n",
    "import phoenix as px\n",
    "from phoenix.otel import register\n",
    "\n",
    "px.launch_app().view()\n",
    "\n",
    "tracer_provider = register()\n",
    "OpenAIInstrumentor(tracer_provider=tracer_provider).instrument()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Human vs AI Template\n",
    "\n",
    "View the default template used to evaluate the AI answers."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "You are comparing a human ground truth answer from an expert to an answer from an AI model.\n",
      "Your goal is to determine if the AI answer correctly matches, in substance, the human answer.\n",
      "    [BEGIN DATA]\n",
      "    ************\n",
      "    [Question]: {question}\n",
      "    ************\n",
      "    [Human Ground Truth Answer]: {correct_answer}\n",
      "    ************\n",
      "    [AI Answer]: {ai_generated_answer}\n",
      "    ************\n",
      "    [END DATA]\n",
      "Compare the AI answer to the human ground truth answer, if the AI correctly answers the question,\n",
      "then the AI answer is \"correct\". If the AI answer is longer but contains the main idea of the\n",
      "Human answer please answer \"correct\". If the AI answer diverges or does not contain the main\n",
      "idea of the human answer, please answer \"incorrect\".\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(HUMAN_VS_AI_PROMPT_TEMPLATE)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The template variables are:\n",
    "\n",
    "- **question:** the question asked by a user\n",
    "- **correct_answer:** human labeled correct answer \n",
    "- **ai_answer:** AI generated answer"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Configure the LLM\n",
    "\n",
    "Configure your OpenAI API key."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "if not (openai_api_key := os.getenv(\"OPENAI_API_KEY\")):\n",
    "    openai_api_key = getpass(\"🔑 Enter your OpenAI API key: \")\n",
    "os.environ[\"OPENAI_API_KEY\"] = openai_api_key"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## LLM Evals:Human Groundtruth vs AI GPT-4\n",
    "Run Human vs AI Eval against a subset of the data.\n",
    "Instantiate the LLM and set parameters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The `model_name` field is deprecated. Use `model` instead.                 This will be removed in a future release.\n"
     ]
    }
   ],
   "source": [
    "model = OpenAIModel(\n",
    "    model_name=\"gpt-4\",\n",
    "    temperature=0.0,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\"Hello! I'm working perfectly. How can I assist you today?\""
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model(\"Hello world, this is a test if you are working?\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Classifications with explanations\n",
    "\n",
    "When evaluating a dataset for relevance, it can be useful to know why the LLM classified an AI answer as relevant or irrelevant. The following code block runs `llm_classify` with explanations turned on so that we can inspect why the LLM made the classification it did. There is speed tradeoff since more tokens is being generated but it can be highly informative when troubleshooting."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "llm_classify |██████████| 119/119 (100.0%) | ⏳ 00:24<00:00 |  4.77it/s\n"
     ]
    }
   ],
   "source": [
    "import nest_asyncio\n",
    "\n",
    "nest_asyncio.apply()\n",
    "# The rails is used to hold the output to specific values based on the template\n",
    "# It will remove text such as \",,,\" or \"...\"\n",
    "# Will ensure the binary value expected from the template is returned\n",
    "rails = list(HUMAN_VS_AI_PROMPT_RAILS_MAP.values())\n",
    "relevance_classifications = llm_classify(\n",
    "    dataframe=df,\n",
    "    template=HUMAN_VS_AI_PROMPT_TEMPLATE,\n",
    "    model=model,\n",
    "    rails=rails,\n",
    "    verbose=False,\n",
    "    provide_explanation=True,\n",
    "    concurrency=50,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Evaluate Classifications\n",
    "\n",
    "Evaluate the predictions against human-labeled ground-truth relevance labels."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "     correct       0.93      0.72      0.81        78\n",
      "   incorrect       0.61      0.92      0.73        39\n",
      "\n",
      "   micro avg       0.77      0.79      0.78       117\n",
      "   macro avg       0.77      0.82      0.77       117\n",
      "weighted avg       0.83      0.79      0.79       117\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Axes: title={'center': 'Confusion Matrix (Normalized)'}, xlabel='Predicted Classes', ylabel='Actual Classes'>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "true_labels = df[\"true_value\"].map(HUMAN_VS_AI_PROMPT_RAILS_MAP).tolist()\n",
    "\n",
    "print(classification_report(true_labels, relevance_classifications[\"label\"], labels=rails))\n",
    "confusion_matrix = ConfusionMatrix(\n",
    "    actual_vector=list(true_labels),\n",
    "    predict_vector=list(relevance_classifications[\"label\"]),\n",
    "    classes=rails,\n",
    ")\n",
    "confusion_matrix.plot(\n",
    "    cmap=plt.colormaps[\"Blues\"],\n",
    "    number_label=True,\n",
    "    normalized=True,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## LLM Evals: Human Groundtruth vs AI  Classifications GPT-3.5 Turbo\n",
    "Run against a subset of the data using GPT-3.5. GPT-3.5 can significantly speed up the classification process. However there are tradeoffs as  we will see below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The `model_name` field is deprecated. Use `model` instead.                 This will be removed in a future release.\n"
     ]
    }
   ],
   "source": [
    "model = OpenAIModel(model_name=\"gpt-3.5-turbo\", temperature=0.0, request_timeout=20)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "llm_classify |██████████| 119/119 (100.0%) | ⏳ 00:21<00:00 |  5.45it/s\n"
     ]
    }
   ],
   "source": [
    "rails = list(HUMAN_VS_AI_PROMPT_RAILS_MAP.values())\n",
    "relevance_classifications_df = llm_classify(\n",
    "    dataframe=df,\n",
    "    template=HUMAN_VS_AI_PROMPT_TEMPLATE,\n",
    "    model=model,\n",
    "    rails=rails,\n",
    "    concurrency=50,\n",
    "    provide_explanation=True,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>label</th>\n",
       "      <th>explanation</th>\n",
       "      <th>exceptions</th>\n",
       "      <th>execution_status</th>\n",
       "      <th>execution_seconds</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>incorrect</td>\n",
       "      <td>To determine if the AI answer is relevant or irrelevant, we need to compare it to the human ground truth answer. The human answer states that Arize supports tracking token usage both prompt and completion usage, and costs can be calculated based on usage. The AI answer is 'nan', which indicates that it does not provide any relevant information related to token usage tracking. Therefore, the AI answer is irrelevant as it does not address the main idea of the human answer.</td>\n",
       "      <td>[]</td>\n",
       "      <td>COMPLETED</td>\n",
       "      <td>1.564911</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>incorrect</td>\n",
       "      <td>The AI answer is 'nan', which stands for 'not a number' and does not provide any relevant information related to the question about LLM Observability. It does not contain any main idea or substance from the human ground truth answer.</td>\n",
       "      <td>[]</td>\n",
       "      <td>COMPLETED</td>\n",
       "      <td>1.330346</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>correct</td>\n",
       "      <td>The AI answer 'Arize supports LLM Evals.' is a shorter version of the human ground truth answer which mentions 'Arize supports a suite of Evals available from the Phoenix Evals library' and lists some pre-tested LLM Evals. While the AI answer is concise, it captures the main idea that Arize supports LLM Evals, which is present in the human answer.</td>\n",
       "      <td>[]</td>\n",
       "      <td>COMPLETED</td>\n",
       "      <td>2.013054</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>correct</td>\n",
       "      <td>To determine if the AI answer is relevant or irrelevant, we need to compare the content of the AI answer to the content of the human ground truth answer. We need to check if the AI answer accurately reflects the information provided in the human answer regarding Arize supporting tracing for LangChain and LlamaIndex LLM spans. We should look for similarities in the details mentioned, such as tracking LLM span data, using the Arize OpenInference callback handler, one-click tracking support for both frameworks, and capturing trace data for various types of spans. If the AI answer matches the main ideas and details of the human answer, it can be considered relevant. If there are significant divergences or missing key information, the AI answer would be deemed irrelevant.</td>\n",
       "      <td>[]</td>\n",
       "      <td>COMPLETED</td>\n",
       "      <td>3.553536</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>correct</td>\n",
       "      <td>The AI answer provides a step-by-step guide on how to upload a ranking model using the SDK. It includes instructions on installing the SDK, configuring it with API keys, defining the model schema, logging model predictions, and sending data to the Arize platform. While the AI answer does not directly mirror the human ground truth answer in terms of content, it covers the essential steps required to upload a ranking model using the SDK, which aligns with the main idea of the human answer.</td>\n",
       "      <td>[]</td>\n",
       "      <td>COMPLETED</td>\n",
       "      <td>2.622465</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       label  \\\n",
       "0  incorrect   \n",
       "1  incorrect   \n",
       "2    correct   \n",
       "3    correct   \n",
       "4    correct   \n",
       "\n",
       "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 explanation  \\\n",
       "0                                                                                                                                                                                                                                                                                                                To determine if the AI answer is relevant or irrelevant, we need to compare it to the human ground truth answer. The human answer states that Arize supports tracking token usage both prompt and completion usage, and costs can be calculated based on usage. The AI answer is 'nan', which indicates that it does not provide any relevant information related to token usage tracking. Therefore, the AI answer is irrelevant as it does not address the main idea of the human answer.   \n",
       "1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  The AI answer is 'nan', which stands for 'not a number' and does not provide any relevant information related to the question about LLM Observability. It does not contain any main idea or substance from the human ground truth answer.   \n",
       "2                                                                                                                                                                                                                                                                                                                                                                                                                                              The AI answer 'Arize supports LLM Evals.' is a shorter version of the human ground truth answer which mentions 'Arize supports a suite of Evals available from the Phoenix Evals library' and lists some pre-tested LLM Evals. While the AI answer is concise, it captures the main idea that Arize supports LLM Evals, which is present in the human answer.   \n",
       "3  To determine if the AI answer is relevant or irrelevant, we need to compare the content of the AI answer to the content of the human ground truth answer. We need to check if the AI answer accurately reflects the information provided in the human answer regarding Arize supporting tracing for LangChain and LlamaIndex LLM spans. We should look for similarities in the details mentioned, such as tracking LLM span data, using the Arize OpenInference callback handler, one-click tracking support for both frameworks, and capturing trace data for various types of spans. If the AI answer matches the main ideas and details of the human answer, it can be considered relevant. If there are significant divergences or missing key information, the AI answer would be deemed irrelevant.   \n",
       "4                                                                                                                                                                                                                                                                                               The AI answer provides a step-by-step guide on how to upload a ranking model using the SDK. It includes instructions on installing the SDK, configuring it with API keys, defining the model schema, logging model predictions, and sending data to the Arize platform. While the AI answer does not directly mirror the human ground truth answer in terms of content, it covers the essential steps required to upload a ranking model using the SDK, which aligns with the main idea of the human answer.   \n",
       "\n",
       "  exceptions execution_status  execution_seconds  \n",
       "0         []        COMPLETED           1.564911  \n",
       "1         []        COMPLETED           1.330346  \n",
       "2         []        COMPLETED           2.013054  \n",
       "3         []        COMPLETED           3.553536  \n",
       "4         []        COMPLETED           2.622465  "
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "relevance_classifications_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "relevance_classifications = relevance_classifications_df[\"label\"].tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "     correct       0.72      0.81      0.76        78\n",
      "   incorrect       0.48      0.38      0.43        39\n",
      "\n",
      "   micro avg       0.66      0.67      0.66       117\n",
      "   macro avg       0.60      0.60      0.59       117\n",
      "weighted avg       0.64      0.67      0.65       117\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Axes: title={'center': 'Confusion Matrix (Normalized)'}, xlabel='Predicted Classes', ylabel='Actual Classes'>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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OCIiIlKPu4FeIDU1Fa1atUKNGjXQvn17xMfHAwD69++P4cOHaz1AIiIiKkwu086hDzROVr744gsYGRnh9u3bMDMzk8q7d++OXbt2aTU4IiIiIo3XrOzevRt//PEHKleurFJevXp1bl0mIiJ6XWRa+G4fPRlZ0ThZycrKUhlRKXD//n2YmJhoJSgiIiJ6MS6wfYFmzZpJj9sH8rM6pVKJGTNmoEWLFloNjoiIiEjjkZUZM2agVatWOHHiBHJycvDll1/i/PnzuH//Pg4ePFgaMRIREdFzZP//r6Rt6AONR1bq1KmDK1euoGnTpujSpQuysrLQrVs3nD59Gh4eHqURIxERET2nPO0G0nhkBQCsra0xZswYbcdCREREVIjGIyu7du3CP//8I71esGABfH190atXLzx48ECrwREREZF6fCjcC4wcORLp6ekAgJiYGISFhaF9+/a4efMmwsLCtB4gERERFVawG6ikhz7QeBro5s2b8Pb2BgBs3rwZnTp1wtSpU3Hq1Cm0b99e6wESERFR+abxyIqxsTEePXoEANi7dy/atGkDALC1tZVGXIiIiKh0yWUyrRz6QOORlaZNmyIsLAxNmjTBsWPHsHHjRgDAlStXCj3VloiIiEoHHwr3At999x0MDQ2xadMmLFy4EC4uLgCA33//He3atdN6gERERFRYeVpgq/HISpUqVbB9+/ZC5XPnztVKQERERETP0nhk5dSpU4iJiZFe//rrrwgODsbXX3+NnJwcrQZHRERE6pWn3UAaJyuDBw/GlStXAAA3btxAjx49YGZmhp9//hlffvml1gMkIiKiwsrTAluNk5UrV67A19cXAPDzzz/jrbfewvr167Fy5Ups3rxZ2/ERERFROafxmhUhBJRKJYD8rcsdO3YEALi6uiIlJUW70REREZFasv8fJW1DH2icrPj7++Obb75BUFAQ/v77byxcuBBA/sPiHB0dtR4gERERFaaN3Tz6shtI42mgyMhInDp1CkOGDMGYMWPg6ekJANi0aRMaN26s9QCJiIiofNN4ZKVu3boqu4EKzJw5EwYGBloJioiIiF5MLss/StqGPtA4WSmKQqHQVlNERET0EuVpGkjjZCUvLw9z587FTz/9hNu3bxd6tsr9+/e1FhwRERGRxmtWJk6ciDlz5qB79+5IS0tDWFgYunXrBrlcjgkTJpRCiERERKRO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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "true_labels = df[\"true_value\"].map(HUMAN_VS_AI_PROMPT_RAILS_MAP).tolist()\n",
    "\n",
    "print(classification_report(true_labels, relevance_classifications, labels=rails))\n",
    "confusion_matrix = ConfusionMatrix(\n",
    "    actual_vector=true_labels, predict_vector=relevance_classifications, classes=rails\n",
    ")\n",
    "confusion_matrix.plot(\n",
    "    cmap=plt.colormaps[\"Blues\"],\n",
    "    number_label=True,\n",
    "    normalized=True,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Preview: Running with GPT-4 Turbo"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The `model_name` field is deprecated. Use `model` instead.                 This will be removed in a future release.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "llm_classify |██████████| 119/119 (100.0%) | ⏳ 00:18<00:00 |  6.30it/s\n"
     ]
    }
   ],
   "source": [
    "model = OpenAIModel(model_name=\"gpt-4-turbo-preview\")\n",
    "relevance_classifications = llm_classify(\n",
    "    dataframe=df,\n",
    "    template=HUMAN_VS_AI_PROMPT_TEMPLATE,\n",
    "    model=model,\n",
    "    rails=list(HUMAN_VS_AI_PROMPT_RAILS_MAP.values()),\n",
    "    concurrency=50,\n",
    ")[\"label\"].tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "     correct       0.87      0.69      0.77        78\n",
      "   incorrect       0.56      0.82      0.67        39\n",
      "\n",
      "   micro avg       0.72      0.74      0.73       117\n",
      "   macro avg       0.72      0.76      0.72       117\n",
      "weighted avg       0.77      0.74      0.74       117\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Axes: title={'center': 'Confusion Matrix (Normalized)'}, xlabel='Predicted Classes', ylabel='Actual Classes'>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "true_labels = df[\"true_value\"].map(HUMAN_VS_AI_PROMPT_RAILS_MAP).tolist()\n",
    "\n",
    "print(classification_report(true_labels, relevance_classifications, labels=rails))\n",
    "confusion_matrix = ConfusionMatrix(\n",
    "    actual_vector=true_labels, predict_vector=relevance_classifications, classes=rails\n",
    ")\n",
    "confusion_matrix.plot(\n",
    "    cmap=plt.colormaps[\"Blues\"],\n",
    "    number_label=True,\n",
    "    normalized=True,\n",
    ")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
